package cn.net.cfss.fgbp.provider.console.biz;

import cn.net.cfss.fgbp.api.console.constant.Constants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author oygq
 * @title: SysRedisCacheBiz
 * @description: 角色权限缓存服务类
 * @date 2019/4/29 18:54
 */

@Service
public class SysRedisCacheBiz {

    @Autowired
    private StringRedisTemplate redisTemplate;

    /**
     * 角色权限更新时更新redis缓存
     * @param authMap
     * @param authMap
     */
    public void roleAuthModify(Map<Long, List<String>> authMap){
        for(Map.Entry<Long, List<String>> entry : authMap.entrySet()){
            if(null == entry.getKey() || entry.getValue().size() == 0){
                continue;
            }
            //先删除旧的key,否则value的值会叠加
            if(redisTemplate.hasKey(String.valueOf(Constants.REDIS_KEY_PRE_ROLE_MENU + entry.getKey()))){
                roleDelete(entry.getKey());
            }
            //更新新的权限集合
            redisTemplate.opsForList().leftPushAll(String.valueOf(Constants.REDIS_KEY_PRE_ROLE_MENU + entry.getKey()), entry.getValue());
        }
    }

    /**
     * 根据角色id在redis里面查询权限集合
     * @param roleId
     * @return
     */
    public List<String> getRoleAuth(Long roleId){
        List<String>  auths = new ArrayList<>();
        if(null != roleId){
            //0，-1 代表集合全部，0，1代表集合第一条数据
            auths = redisTemplate.opsForList().range(Constants.REDIS_KEY_PRE_ROLE_MENU + String.valueOf(roleId), 0, -1);
        }
        return auths;
    }

    /**
     * 删除角色时删除redis中角色权限缓存
     * @param roleId
     */
    public void roleDelete(Long roleId){
        if(null != roleId){
            redisTemplate.delete(Constants.REDIS_KEY_PRE_ROLE_MENU + String.valueOf(roleId));
        }
    }
}
